/*
 * @Description: 常用的正则表达式
 * @Author: yilingsj（315800015@qq.com）
 * @Date: 2021-03-31 20:03:09
 * @LastEditors: liu (1427179517@qq.com)
 * @LastEditTime: 2022-01-09 15:24:16
 */
const regRules = {
  idCard:
    /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|31)|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}([0-9]|x|X)$/, // 身份证
  bankId: /^\d{16}|\d{19}$/, // 银行卡
  mobile: /^1[3456789]\d{9}$/, // 手机号
  mobileCode: /^\d{4}$/, // 手机号验证码
  positiveNumber: /(^\d+$)|(^\d+\.\d+$)/, // 正数
  weixin: /^[a-zA-Z][a-zA-Z0-9_-]{5,19}$/, // 微信号
}
/**
 * @author: yilingsj（315800015@qq.com）
 * @description: 检测手机号
 * @param {Object} data object
 * @param {Function} callback function
 * @return {void}
 * @Date: 2020-07-07 14:23:54
 */
export const vailData = {
  mobile: (val) => {
    console.log('检测val=', val)
    if (!val) {
      return '请输入手机号'
    }
    if (!/^1[3456789]\d{9}$/.test(val)) {
      return '手机号格式不正确'
    }
    return true
  },
  code: (val) => {
    if (!val) {
      return '请输入验证码'
    }
    if (!/\d/.test(val) || val.toString().length !== 4) {
      return '验证码为4位'
    }
    return true
  },
}
/**
 * @author: yilingsj（315800015@qq.com）
 * @description: 校验身份证
 * @param {Object} rule 当前数据
 * @param {Number} value 输入的值
 * @param {Function} callback 回调
 * @return {*}
 * @Date: 2021-03-31 20:04:14
 */
const validateIdcard = (rule, value, callback) => {
  if (value === '') {
    return callback('请输入身份证号')
  }
  if (!regRules.idCard.test(value)) {
    return callback('身份证不正确')
  }
  if (value.length > 18) {
    return callback('身份证长度不正确')
  }
  callback()
}
/**
 * @author: yilingsj（315800015@qq.com）
 * @description: 校验身份证
 * @param {Object} rule 当前数据
 * @param {Number} value 输入的值
 * @param {Function} callback 回调
 * @return {*}
 * @Date: 2021-03-31 20:04:14
 */
const validateWeixin = (rule, value, callback) => {
  if (value === '') {
    return callback('微信号不能为空')
  }
  if (!regRules.weixin.test(value)) {
    return callback('请输入正确的微信号码')
  }
  callback()
}
/**
 * @author: yilingsj（315800015@qq.com）
 * @description: 验证银行卡
 * @param {Object} rule 当前数据
 * @param {Number} value 输入的值
 * @param {Function} callback 回调
 * @return {*}
 * @Date: 2021-03-31 20:25:13
 */
const validatorBankId = (rule, value, callback) => {
  if (value === '') {
    return callback('请输入银行卡号')
  }
  if (!regRules.bankId.test(value)) {
    return callback('银行卡位数不正确')
  }
  callback()
}
/**
 * @author: yilingsj（315800015@qq.com）
 * @description: 验证手机号
 * @param {Object} rule 当前数据
 * @param {Number} value 输入的值
 * @param {Function} callback 回调
 * @return {*}
 * @Date: 2021-03-31 20:38:01
 */
const validatorMobile = (rule, value, callback) => {
  if (value === '') {
    return callback('请先输入手机号')
  }
  if (!regRules.mobile.test(value)) {
    return callback('手机号位数不正确')
  }
  callback()
}
/**
 * @author: yilingsj（315800015@qq.com）
 * @description: 校验正数
 * @param {Object} rule 当前数据
 * @param {Number} value 输入的值
 * @param {Function} callback 回调
 * @return {*}
 * @Date: 2021-03-31 20:43:46
 */
const validatorPositiveNumber = (rule, value, callback) => {
  if (value === '') {
    return callback('请输入正数')
  }
  if (!regRules.positiveNumber.test(value)) {
    return callback('只能输入正数！')
  }
  callback()
}
/**
 * @author: yilingsj（315800015@qq.com）
 * @description: 校验手机验证码(4位)
 * @param {Object} rule 当前数据
 * @param {Number} value 输入的值
 * @param {Function} callback 回调
 * @return {*}
 * @Date: 2021-03-31 20:48:17
 */
const validatorMobileCode = (rule, value, callback) => {
  if (value === '') {
    return callback('请输入验证码')
  }
  if (!regRules.mobileCode.test(value)) {
    return callback('验证码限4位数字！')
  }
  callback()
}
/**
 * @author: yiling (315800015@qq.com)
 * @description: 动态输出校验规则
 * @param {Boolean} required 布尔值
 * @param {String} name 键值文本（示例：手机号）
 * @param {String} type 校验类型（示例：mobile）
 * @return {*}
 * @Date: 2021-09-30 13:22:45
 */
const dynamicOutputVerificationRules = ({ required, name, type } = {}) => {
  if (!(type in regRules)) {
    console.log('暂未发现名为%c' + type, 'color:#f00', ' 的正则规则')
    return
  }
  return {
    validator: (rule, value, callback) => {
      // 有值或必填时强制校验
      if (value || required) {
        return regRules[type].test(value)
      } else {
        // 其他情况直接放行
        return true
      }
    },
    message: name + '不正确',
    trigger: ['change', 'blur'],
  }
}

export {
  regRules,
  validateIdcard,
  validateWeixin,
  validatorBankId,
  validatorMobile,
  validatorPositiveNumber,
  validatorMobileCode,
  dynamicOutputVerificationRules,
}
